Packages

#install.packages("pacman")
#pacman::p_install_gh("systats/binoculaR")
pacman::p_load(tidyverse, magrittr, haven, ggthemes, sjPlot, sjmisc, sjstats, binoculaR, ggplot2, grid, gridExtra, gtable, cowplot, psych, car, lme4, ggpubr, rmarkdown, texreg, MuMIn, janitor, plotly, here)
Installing package into 㤼㸱C:/Users/Fabio/Documents/R/win-library/3.4㤼㸲
(as 㤼㸱lib㤼㸲 is unspecified)
trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/here_0.1.zip'
Content type 'application/zip' length 16785 bytes (16 KB)
downloaded 16 KB
package ‘here’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\Fabio\AppData\Local\Temp\RtmpIfuLhM\downloaded_packages

here installed
package 㤼㸱here㤼㸲 was built under R version 3.4.3

Load in Data

arab4 <- read_spss("data/arab4.sav")
# arab4 <- get(load(url("https://github.com/favstats/GodlyGovernance/raw/master/data/arab4.Rdata")))
ifelse4cat_rec <- function(variable) {
  recoded <- ifelse(variable == 0 | variable > 5, NA, 5 - variable)
  return(recoded)
}

Filter Data

arab4 %<>%
  filter(q1012 == 1) %>%#only Muslims
  mutate(sample = ifelse(is.na(sample) | sample == 1, 1, 2)) # %>% 
#  filter(sample != 2) #only non-refugees

Recoding

table(arab4$country)

   1    5    8   10   13   15   21 
1199 1146 1472  902 1199 1177 1200 
arab4 %<>% 
  mutate(cntry = sjmisc::to_label(country)) %>% 
  mutate(region = sjmisc::to_label(a1)) %>% 
  mutate(governorate = sjmisc::to_label(q1)) %>% 
  mutate(year = 2016) %>% 
  mutate(cntry = case_when(
    sample == 2 ~ "Syrian Refugees",
    TRUE ~ as.character(cntry)
  )) %>% 
  filter(cntry != "Egypt") %>% 
  mutate(region = sjmisc::to_label(a1)) %>% 
  mutate(governorate = sjmisc::to_label(q1)) %>%
  mutate(district = sjmisc::to_label(q2)) %>% 
  mutate(daesh_resp = factor(sjmisc::to_label(q831))) %>% 
  mutate(daesh_resp = case_when(
    daesh_resp == "Don't know (Do not read)" ~ "Don't know",
    daesh_resp == "GCC country (other than Saudi Arabia)" ~ "Other Gulf country",
    daesh_resp == "Decline to answer (Do not read)" ~ "Decline to answer",
    TRUE ~ as.character(daesh_resp)
  )) %>% 
  mutate(threat_cntry_num = ifelse(q826 > 5, NA, q826)) %>% 
  mutate(threat_reg_num = ifelse(q827 > 5, NA, q827)) %>% 
  mutate(daesh_islam_num = ifelse(q828 > 5, NA, 5 - q828)) %>% 
  mutate(daesh_goal_num = ifelse(q829 > 5, NA, 5 - q829)) %>% 
  mutate(daesh_violence_num = ifelse(q830 > 5, NA, 5 - q830)) 
# Dependent Variable
arab4 %<>% 
  mutate(islamistparties = ifelse(q5182 > 5, NA, 5 - q5182)) %>% 
  mutate(islamistgov = ifelse(q5184 > 5, NA, 5 - q5184)) %>% 
  mutate(religinterfere = ifelse(q6061 > 5, NA, q6061)) %>% 
  mutate(religleaders = ifelse(q6062 > 5, NA, 5 - q6062)) %>% 
  mutate(religleadersinfl = ifelse(q6063 > 5, NA, 5 - q6063)) %>%
  mutate(seperation = ifelse(q6064 > 5, NA, q6064)) %>% 
  mutate(religparty = Recode(q605a, "1 = 1;
                                     2 = 1;
                                     3 = 0;
                                     4 = 0;
                                     5 = 0;
                                    98 = 0;
                                    99 = NA")) %>% 
  mutate(religparty2 = Recode(q605a, "1 = 5;
                                      2 = 4;
                                      3 = 2;
                                      4 = 1;
                                      5 = 3;
                                     98 = NA;
                                     99 = NA"))
arab4 %<>% 
  mutate(female = ifelse(q1002 == 2, 1, 0)) %>% 
  mutate(work = ifelse(q1004 == 0 | q1004 > 5, NA, abs(q1004 - 2))) %>% 
  mutate(income = ifelse4cat_rec(q1016)) %>% 
  mutate(age = ifelse(q1001 == 0 | q1001 == 9999, NA, q1001)) %>% 
  mutate(educ = case_when(
        q1003 == 0 ~ NA_real_,
        q1003 == 98 ~ NA_real_,
        q1003 == 99 ~ NA_real_,
        q1003 == 5 ~ 4,
        q1003 == 6 ~ 5,
        q1003 == 7 ~ 6,
        t1003 == 0 ~ NA_real_,
        t1003 == 98 ~ NA_real_,
        t1003 == 99 ~ NA_real_,
        t1003 == 3 ~ 3,
        t1003 == 4 ~ 4,
        t1003 == 5 ~ 5,
        t1003 == 6 ~ 6,
    TRUE ~ as.numeric(q1003))
    ) %>% 
  mutate(globalism = ifelse(q701b == 0 | q701b > 5, NA, q701b)) %>% 
  mutate(pray = ifelse(q6101 == 0 | q6101 > 5, NA, 6 - q6101)) %>% 
  mutate(quran = ifelse(q6106 == 0 | q6106 > 5, NA, 6 - q6106)) %>% 
  mutate(womanwork = ifelse(q6012 == 0 | q6012 > 5, NA, q6012)) %>% 
  mutate(womenleader = ifelse4cat_rec(q6013)) %>% 
  mutate(womeneduc = ifelse4cat_rec(q6014)) %>% 
  mutate(nodemoc = ifelse(q6071 == 0 | q6071 > 5, NA, q6071)) %>% 
  mutate(genderapartuni = ifelse4cat_rec(q6074)) %>% 
  mutate(coverup = ifelse4cat_rec(q6076)) 

Excluding ISIS

frq(arab4 %>% select(daesh_islam_num, daesh_goal_num, daesh_violence_num))

# Total N = 7149 (valid N = 6951)

  val  frq  label raw.prc valid.prc cum.prc
    1 6170 <none>   86.31     88.76   88.76
    2  434 <none>    6.07      6.24   95.01
    3  202 <none>    2.83      2.91   97.91
    4  145 <none>    2.03      2.09  100.00
 <NA>  198 <none>    2.77        NA      NA


# Total N = 7149 (valid N = 7019)

  val  frq  label raw.prc valid.prc cum.prc
    1 6477 <none>   90.60     92.28   92.28
    2  358 <none>    5.01      5.10   97.38
    3  135 <none>    1.89      1.92   99.30
    4   49 <none>    0.69      0.70  100.00
 <NA>  130 <none>    1.82        NA      NA


# Total N = 7149 (valid N = 7047)

  val  frq  label raw.prc valid.prc cum.prc
    1 6604 <none>   92.38     93.71   93.71
    2  295 <none>    4.13      4.19   97.90
    3   75 <none>    1.05      1.06   98.96
    4   73 <none>    1.02      1.04  100.00
 <NA>  102 <none>    1.43        NA      NA
arab4 %<>% 
  mutate(symp = case_when(
#    daesh_islam_num == 1 ~ 0,
#    daesh_islam_num == 2 ~ 0,
    daesh_islam_num == 3 ~ 1,
    daesh_islam_num == 4 ~ 1,
#    daesh_goal_num == 1 ~ 0,
#    daesh_goal_num == 2 ~ 0,
    daesh_goal_num == 3 ~ 1,
    daesh_goal_num == 4 ~ 1,
#    daesh_violence_num == 1 ~ 0,
#    daesh_violence_num == 2 ~ 0,
    daesh_violence_num == 3 ~ 1,
    daesh_violence_num == 4 ~ 1,
    TRUE ~ 0
  )) %>%   
  mutate(compatible = case_when(
    daesh_islam_num == 1 ~ 0,
    daesh_islam_num == 2 ~ 0,
    daesh_islam_num == 3 ~ 1,
    daesh_islam_num == 4 ~ 1,
    TRUE ~ NA_real_
  )) %>%   
  mutate(goals = case_when(
    daesh_goal_num == 1 ~ 0,
    daesh_goal_num == 2 ~ 0,
    daesh_goal_num == 3 ~ 1,
    daesh_goal_num == 4 ~ 1,
    TRUE ~ NA_real_
  )) %>%   
  mutate(violence = case_when(
    daesh_violence_num == 1 ~ 0,
    daesh_violence_num == 2 ~ 0,
    daesh_violence_num == 3 ~ 1,
    daesh_violence_num == 4 ~ 1,
    TRUE ~ NA_real_
  )) %>%   
  mutate(symp2 = daesh_islam_num + daesh_goal_num + daesh_violence_num) %>% 
  mutate(symp3 = ifelse(symp2 >= 5, 1, 0)) %>% 
  select(cntry, year, region, governorate , islamistparties , islamistgov, religinterfere, religleaders, religleadersinfl, seperation, religparty, religparty2, female, work, income,  age, educ, globalism, pray, quran, womanwork, womenleader, womeneduc, nodemoc, genderapartuni, coverup, daesh_islam_num, daesh_goal_num, daesh_violence_num, symp, symp2, symp3, wt, compatible, goals, violence) #%>% 
#  filter(daesh_islam_num >= 3 | daesh_goal_num >= 3 | daesh_violence_num >= 3) %>% 
#  select(daesh_islam_num, daesh_goal_num, daesh_violence_num, symp, symp2, symp3) %>% 
#  frq()
arab4 %>% 
  select(daesh_islam_num, daesh_goal_num, daesh_violence_num, cntry) %>% 
  na.omit() %>% 
  select(cntry) %>% 
  table()
.
        Algeria          Jordan         Lebanon 
           1139            1158             614 
        Morocco       Palestine Syrian Refugees 
           1144            1132             570 
        Tunisia 
           1150 
arab4 %>% 
  select(compatible, goals, violence, cntry) %>% 
  frq()

# Total N = 7149 (valid N = 6951)

  val  frq  label raw.prc valid.prc cum.prc
    0 6604 <none>   92.38     95.01   95.01
    1  347 <none>    4.85      4.99  100.00
 <NA>  198 <none>    2.77        NA      NA


# Total N = 7149 (valid N = 7019)

  val  frq  label raw.prc valid.prc cum.prc
    0 6835 <none>   95.61     97.38   97.38
    1  184 <none>    2.57      2.62  100.00
 <NA>  130 <none>    1.82        NA      NA


# Total N = 7149 (valid N = 7047)

  val  frq  label raw.prc valid.prc cum.prc
    0 6899 <none>   96.50      97.9    97.9
    1  148 <none>    2.07       2.1   100.0
 <NA>  102 <none>    1.43        NA      NA


# Total N = 7149 (valid N = 7149)

             val  frq  label raw.prc valid.prc cum.prc
         Algeria 1199 <none>   16.77     16.77   16.77
          Jordan 1172 <none>   16.39     16.39   33.17
         Lebanon  615 <none>    8.60      8.60   41.77
         Morocco 1199 <none>   16.77     16.77   58.54
       Palestine 1177 <none>   16.46     16.46   75.00
 Syrian Refugees  587 <none>    8.21      8.21   83.21
         Tunisia 1200 <none>   16.79     16.79  100.00
            <NA>    0 <none>    0.00        NA      NA

Factor Analysis

f31 <- arab4 %>% 
  select(islamistparties, islamistgov, 
         religleaders, religleadersinfl) %>% 
  fa(1, rotate = "promax",   
        fm = "pa",
        scores = "regression")           
fa.diagram(f31)                                  

f31              
Factor Analysis using method =  pa
Call: fa(r = ., nfactors = 1, rotate = "promax", scores = "regression", 
    fm = "pa")
Standardized loadings (pattern matrix) based upon correlation matrix
                  PA1   h2   u2 com
islamistparties  0.49 0.24 0.76   1
islamistgov      0.50 0.25 0.75   1
religleaders     0.74 0.55 0.45   1
religleadersinfl 0.66 0.43 0.57   1

                PA1
SS loadings    1.46
Proportion Var 0.37

Mean item complexity =  1
Test of the hypothesis that 1 factor is sufficient.

The degrees of freedom for the null model are  6  and the objective function was  0.71 with Chi Square of  5041.96
The degrees of freedom for the model are 2  and the objective function was  0.07 

The root mean square of the residuals (RMSR) is  0.07 
The df corrected root mean square of the residuals is  0.13 

The harmonic number of observations is  6572 with the empirical chi square  431.33  with prob <  0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022 
The total number of observations was  7149  with Likelihood Chi Square =  497.61  with prob <  0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088 

Tucker Lewis Index of factoring reliability =  0.705
RMSEA index =  0.186  and the 90 % confidence intervals are  0.173 0.2
BIC =  479.86
Fit based upon off diagonal values = 0.96
Measures of factor score adequacy             
                                                   PA1
Correlation of (regression) scores with factors   0.85
Multiple R square of scores with factors          0.72
Minimum correlation of possible factor scores     0.44
arab4 <- predict(f31, arab4 %>% 
  select(islamistparties, islamistgov, 
         religleaders, religleadersinfl)) %>% 
  data.frame() %>% 
  rename(islamism = PA1) %>% 
  cbind(arab4) 
#%>% 
#  ggplot(aes(islamism)) +
#  geom_histogram() +
#  facet_wrap(~cntry, scales = "free")
#sjPlot::view_df(arab, show.frq = T, show.prc = T)
f21 <- arab4 %>% 
  select(daesh_islam_num, daesh_goal_num, daesh_violence_num) %>% 
  fa(1, rotate = "promax",   
        fm = "pa",
        scores = "regression")           
fa.diagram(f21)                                  

f21              
Factor Analysis using method =  pa
Call: fa(r = ., nfactors = 1, rotate = "promax", scores = "regression", 
    fm = "pa")
Standardized loadings (pattern matrix) based upon correlation matrix
                    PA1   h2   u2 com
daesh_islam_num    0.65 0.42 0.58   1
daesh_goal_num     0.88 0.77 0.23   1
daesh_violence_num 0.67 0.45 0.55   1

                PA1
SS loadings    1.64
Proportion Var 0.55

Mean item complexity =  1
Test of the hypothesis that 1 factor is sufficient.

The degrees of freedom for the null model are  3  and the objective function was  0.84 with Chi Square of  6028.12
The degrees of freedom for the model are 0  and the objective function was  0 

The root mean square of the residuals (RMSR) is  0 
The df corrected root mean square of the residuals is  NA 

The harmonic number of observations is  6968 with the empirical chi square  0.15  with prob <  NA 
The total number of observations was  7149  with Likelihood Chi Square =  0.33  with prob <  NA 

Tucker Lewis Index of factoring reliability =  -Inf
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                   PA1
Correlation of (regression) scores with factors   0.91
Multiple R square of scores with factors          0.83
Minimum correlation of possible factor scores     0.66
arab4 <- predict(f21, arab4 %>% 
  select(daesh_islam_num, daesh_goal_num, daesh_violence_num)) %>% 
  data.frame() %>% 
  mutate(support = range01(PA1)) %>% 
  select(support) %>% 
  cbind(arab4)  #%>% 
hist(arab4$support)

Creating indices

f1 <- arab4 %>% 
  select(womanwork, womenleader, womeneduc) %>% 
  fa(1, rotate = "promax",   
        fm = "pa",
        scores = "regression")           
fa.diagram(f1)                                  

f1        
Factor Analysis using method =  pa
Call: fa(r = ., nfactors = 1, rotate = "promax", scores = "regression", 
    fm = "pa")
Standardized loadings (pattern matrix) based upon correlation matrix
             PA1   h2   u2 com
womanwork   0.52 0.27 0.73   1
womenleader 0.44 0.19 0.81   1
womeneduc   0.51 0.26 0.74   1

                PA1
SS loadings    0.72
Proportion Var 0.24

Mean item complexity =  1
Test of the hypothesis that 1 factor is sufficient.

The degrees of freedom for the null model are  3  and the objective function was  0.16 with Chi Square of  1130.34
The degrees of freedom for the model are 0  and the objective function was  0 

The root mean square of the residuals (RMSR) is  0 
The df corrected root mean square of the residuals is  NA 

The harmonic number of observations is  7069 with the empirical chi square  0.03  with prob <  NA 
The total number of observations was  7149  with Likelihood Chi Square =  0.02  with prob <  NA 

Tucker Lewis Index of factoring reliability =  -Inf
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                    PA1
Correlation of (regression) scores with factors    0.70
Multiple R square of scores with factors           0.49
Minimum correlation of possible factor scores     -0.02
f2 <- arab4 %>% 
  select(pray, quran) %>% 
  fa(1, rotate = "promax",   
        fm = "pa",
        scores = "regression")           
fa.diagram(f2)                                  

f2    
Factor Analysis using method =  pa
Call: fa(r = ., nfactors = 1, rotate = "promax", scores = "regression", 
    fm = "pa")
Standardized loadings (pattern matrix) based upon correlation matrix
       PA1   h2   u2 com
pray  0.67 0.45 0.55   1
quran 0.67 0.45 0.55   1

                PA1
SS loadings    0.90
Proportion Var 0.45

Mean item complexity =  1
Test of the hypothesis that 1 factor is sufficient.

The degrees of freedom for the null model are  1  and the objective function was  0.22 with Chi Square of  1602.53
The degrees of freedom for the model are -1  and the objective function was  0 

The root mean square of the residuals (RMSR) is  0 
The df corrected root mean square of the residuals is  NA 

The harmonic number of observations is  7124 with the empirical chi square  0  with prob <  NA 
The total number of observations was  7149  with Likelihood Chi Square =  0  with prob <  NA 

Tucker Lewis Index of factoring reliability =  1.001
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                   PA1
Correlation of (regression) scores with factors   0.79
Multiple R square of scores with factors          0.62
Minimum correlation of possible factor scores     0.24
f3 <- arab4 %>% 
  select(nodemoc, genderapartuni, coverup) %>% 
  fa(1, rotate = "promax",   
        fm = "pa",
        scores = "regression")           
fa.diagram(f3)                                  

f3    
Factor Analysis using method =  pa
Call: fa(r = ., nfactors = 1, rotate = "promax", scores = "regression", 
    fm = "pa")
Standardized loadings (pattern matrix) based upon correlation matrix
                PA1     h2   u2 com
nodemoc        0.06 0.0036 1.00   1
genderapartuni 0.59 0.3463 0.65   1
coverup        0.54 0.2883 0.71   1

                PA1
SS loadings    0.64
Proportion Var 0.21

Mean item complexity =  1
Test of the hypothesis that 1 factor is sufficient.

The degrees of freedom for the null model are  3  and the objective function was  0.11 with Chi Square of  784.96
The degrees of freedom for the model are 0  and the objective function was  0 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  NA 

The harmonic number of observations is  6741 with the empirical chi square  20.59  with prob <  NA 
The total number of observations was  7149  with Likelihood Chi Square =  16.56  with prob <  NA 

Tucker Lewis Index of factoring reliability =  -Inf
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                    PA1
Correlation of (regression) scores with factors    0.70
Multiple R square of scores with factors           0.48
Minimum correlation of possible factor scores     -0.03
arab4 %>% 
  select(nodemoc, genderapartuni, coverup) %>% 
  KMO()
Kaiser-Meyer-Olkin factor adequacy
Call: KMO(r = .)
Overall MSA =  0.5
MSA for each item = 
       nodemoc genderapartuni        coverup 
          0.46           0.50           0.50 
arab4_reg <- arab4 %>% 
  mutate(patriarchalvalues = womanwork + womenleader + womeneduc)  %>% 
  mutate(personalpiety = pray + quran) %>% 
# mutate(islamism = scale(islamism)) %>% 
#  mutate_if(.predicate = is.double, scale) 
  mutate(liberalislam = nodemoc + genderapartuni + coverup) %>% 
  mutate(cntryears = paste(cntry, year))
arab4_reg$islamism <- as.numeric(range01(arab4_reg$islamism) * 100)
arab4_reg$income             <- as.numeric(scale(arab4_reg$income))
arab4_reg$age                <- as.numeric(scale(arab4_reg$age))
arab4_reg$educ               <- as.numeric(scale(arab4_reg$educ)) 
arab4_reg$globalism          <- as.numeric(scale(arab4_reg$globalism))   
arab4_reg$personalpiety      <- as.numeric(scale(arab4_reg$personalpiety))       
arab4_reg$patriarchalvalues  <- as.numeric(scale(arab4_reg$patriarchalvalues))           
arab4_reg$liberalislam       <- as.numeric(scale(arab4_reg$liberalislam))     

Visualizations

all <- sjp.xtab(round(range01(arab4_reg$personalpiety)*4), 
               arab4_reg$symp3,
               weight.by = arab4_reg$wt, 
               coord.flip = T, 
               margin = "row" )$mydf
all$cntry <- "All"
line_plots <- function(country, variable) {
  arab4_reg %<>% 
    filter(cntry == country)
ss <- sjp.xtab(round(range01(arab4_reg$personalpiety)*4),
               arab4_reg$symp3,
               weight.by = arab4_reg$wt, 
               coord.flip = T, 
               margin = "row", prnt.plot = F)$mydf
ss$cntry <- country
return(ss)
}
ss <- dput(unique(arab4_reg$cntry)) %>% 
  map_df(line_plots) %>% 
  rbind(all)
c("Algeria", "Jordan", "Syrian Refugees", "Lebanon", "Morocco", 
"Palestine", "Tunisia")
## Two-way frequency table on 'music' variables by sex
ss %>% 
  select(rowname, group, prc, n, cntry) %>% 
  filter(group == "X1") %>% 
  ggplot(aes(x = rowname, y = prc, group = cntry, color = cntry)) +
#  geom_point() +
  geom_line() +
  facet_wrap(~cntry)
Adding missing grouping variables: `xpos`

education

## Two-way frequency table on 'music' variables by sex
ss %>% 
  select(rowname, group, prc, n, cntry) %>% 
  filter(group == "X1") %>% 
  ggplot(aes(x = rowname, y = prc, group = cntry, color = cntry)) +
#  geom_point() +
  geom_line() + 
  facet_wrap(~cntry, scales = "free")
Adding missing grouping variables: `xpos`

plotly::ggplotly()
We recommend that you use the dev version of ggplot2 with `ggplotly()`
Install it with: `devtools::install_github('hadley/ggplot2')`
get_data(arab4_reg = arab4_reg, whichone = arab4_reg$income, scale = 4)
c("Algeria", "Jordan", "Syrian Refugees", "Lebanon", "Morocco", 
"Palestine", "Tunisia")
Error in model.frame.default(formula = weight.by ~ x_full + grp_full) : 
  Variablenlängen sind unterschiedlich (gefunden für 'x_full')

Linear Regressions

model0 <- arab4_reg %>% 
  lme4::lmer(symp2 ~ 1 + (1|cntry/year), data = .)
icc(model0)

Linear mixed model
 Family: gaussian (identity)
Formula: symp2 ~ 1 + (1 | cntry/year)

  ICC (year:cntry): 0.009657
       ICC (cntry): 0.048077
model1 <- lme4::lmer(symp2 ~ female + work + income + age + educ + globalism + personalpiety + patriarchalvalues + liberalislam + islamism + (1|cntry), data = arab4_reg)
texreg::screenreg(model1)

====================================
                        Model 1     
------------------------------------
(Intercept)                 3.18 ***
                           (0.11)   
female                     -0.03    
                           (0.04)   
work                       -0.07    
                           (0.04)   
income                     -0.02    
                           (0.02)   
age                        -0.00    
                           (0.02)   
educ                        0.07 ***
                           (0.02)   
globalism                  -0.01    
                           (0.02)   
personalpiety              -0.03    
                           (0.02)   
patriarchalvalues           0.15 ***
                           (0.02)   
liberalislam                0.00    
                           (0.02)   
islamism                    0.01 ***
                           (0.00)   
------------------------------------
AIC                     15257.49    
BIC                     15341.60    
Log Likelihood          -7615.74    
Num. obs.                4770       
Num. groups: cntry          7       
Var: cntry (Intercept)      0.07    
Var: Residual               1.40    
====================================
*** p < 0.001, ** p < 0.01, * p < 0.05
plot_model(model1, type = "re", sort.est = T, show.values = T, show.p = T, value.offset = 0.5)
Sorting each group of random effects ('sort.all') is not possible when 'facets = TRUE'.

#plot_model(model1, type = "std", sort.est = T, show.values = T, show.p = T, value.offset = 0.5)
sjp.lmer(model1, type = "fe.std", sort.est = T, show.values = T, show.p = T, y.offset = 0.4, p.kr = FALSE)
Computing p-values via Wald-statistics approximation (treating t as Wald z).

plot_model(model1, terms = c("liberalislam", "personalpiety"), type = "pred")
Note: uncertainty of the random effects parameters are not taken into account for confidence intervals.

Poisson Regressions

#summary(m1 <- glm(support ~ female + work + income + age + educ + globalism + personalpiety + patriarchalvalues + liberalislam, family="poisson", data=arab4_reg))
#plot_model(m1)

Logistic Regressions

LS0tDQp0aXRsZTogIkRhZXNoIEFuYWx5c2lzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyBQYWNrYWdlcw0KDQpgYGB7cn0NCiNpbnN0YWxsLnBhY2thZ2VzKCJwYWNtYW4iKQ0KI3BhY21hbjo6cF9pbnN0YWxsX2doKCJzeXN0YXRzL2Jpbm9jdWxhUiIpDQpwYWNtYW46OnBfbG9hZCh0aWR5dmVyc2UsIG1hZ3JpdHRyLCBoYXZlbiwgZ2d0aGVtZXMsIHNqUGxvdCwgc2ptaXNjLCBzanN0YXRzLCBiaW5vY3VsYVIsIGdncGxvdDIsIGdyaWQsIGdyaWRFeHRyYSwgZ3RhYmxlLCBjb3dwbG90LCBwc3ljaCwgY2FyLCBsbWU0LCBnZ3B1YnIsIHJtYXJrZG93biwgdGV4cmVnLCBNdU1JbiwgamFuaXRvciwgcGxvdGx5LCBoZXJlKQ0KDQojZGV2dG9vbHM6Omluc3RhbGxfZ2l0aHViKCJ0aG9tYXNwODUvcGF0Y2h3b3JrIikNCnJhbmdlMDEgPC0gZnVuY3Rpb24oeCl7KHggLSBtaW4oeCwgbmEucm0gPSBUKSkgLyAobWF4KHgsIG5hLnJtID0gVCkgLSBtaW4oeCwgbmEucm0gPSBUKSl9DQoNCmBgYA0KDQojIExvYWQgaW4gRGF0YQ0KDQpgYGB7cn0NCmFyYWI0IDwtIHJlYWRfc3BzcygiZGF0YS9hcmFiNC5zYXYiKQ0KDQojIGFyYWI0IDwtIGdldChsb2FkKHVybCgiaHR0cHM6Ly9naXRodWIuY29tL2ZhdnN0YXRzL0dvZGx5R292ZXJuYW5jZS9yYXcvbWFzdGVyL2RhdGEvYXJhYjQuUmRhdGEiKSkpDQoNCmlmZWxzZTRjYXRfcmVjIDwtIGZ1bmN0aW9uKHZhcmlhYmxlKSB7DQogIHJlY29kZWQgPC0gaWZlbHNlKHZhcmlhYmxlID09IDAgfCB2YXJpYWJsZSA+IDUsIE5BLCA1IC0gdmFyaWFibGUpDQogIHJldHVybihyZWNvZGVkKQ0KfQ0KDQoNCmBgYA0KDQoNCg0KIyBGaWx0ZXIgRGF0YQ0KDQpgYGB7cn0NCmFyYWI0ICU8PiUNCiAgZmlsdGVyKHExMDEyID09IDEpICU+JSNvbmx5IE11c2xpbXMNCiAgbXV0YXRlKHNhbXBsZSA9IGlmZWxzZShpcy5uYShzYW1wbGUpIHwgc2FtcGxlID09IDEsIDEsIDIpKSAjICU+JSANCiMgIGZpbHRlcihzYW1wbGUgIT0gMikgI29ubHkgbm9uLXJlZnVnZWVzDQoNCmBgYA0KDQoNCg0KIyBSZWNvZGluZw0KDQpgYGB7cn0NCnRhYmxlKGFyYWI0JGNvdW50cnkpDQoNCmFyYWI0ICU8PiUgDQogIG11dGF0ZShjbnRyeSA9IHNqbWlzYzo6dG9fbGFiZWwoY291bnRyeSkpICU+JSANCiAgbXV0YXRlKHJlZ2lvbiA9IHNqbWlzYzo6dG9fbGFiZWwoYTEpKSAlPiUgDQogIG11dGF0ZShnb3Zlcm5vcmF0ZSA9IHNqbWlzYzo6dG9fbGFiZWwocTEpKSAlPiUgDQogIG11dGF0ZSh5ZWFyID0gMjAxNikgJT4lIA0KICBtdXRhdGUoY250cnkgPSBjYXNlX3doZW4oDQogICAgc2FtcGxlID09IDIgfiAiU3lyaWFuIFJlZnVnZWVzIiwNCiAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKGNudHJ5KQ0KICApKSAlPiUgDQogIGZpbHRlcihjbnRyeSAhPSAiRWd5cHQiKSAlPiUgDQogIG11dGF0ZShyZWdpb24gPSBzam1pc2M6OnRvX2xhYmVsKGExKSkgJT4lIA0KICBtdXRhdGUoZ292ZXJub3JhdGUgPSBzam1pc2M6OnRvX2xhYmVsKHExKSkgJT4lDQogIG11dGF0ZShkaXN0cmljdCA9IHNqbWlzYzo6dG9fbGFiZWwocTIpKSAlPiUgDQogIG11dGF0ZShkYWVzaF9yZXNwID0gZmFjdG9yKHNqbWlzYzo6dG9fbGFiZWwocTgzMSkpKSAlPiUgDQogIG11dGF0ZShkYWVzaF9yZXNwID0gY2FzZV93aGVuKA0KICAgIGRhZXNoX3Jlc3AgPT0gIkRvbid0IGtub3cgKERvIG5vdCByZWFkKSIgfiAiRG9uJ3Qga25vdyIsDQogICAgZGFlc2hfcmVzcCA9PSAiR0NDIGNvdW50cnkgKG90aGVyIHRoYW4gU2F1ZGkgQXJhYmlhKSIgfiAiT3RoZXIgR3VsZiBjb3VudHJ5IiwNCiAgICBkYWVzaF9yZXNwID09ICJEZWNsaW5lIHRvIGFuc3dlciAoRG8gbm90IHJlYWQpIiB+ICJEZWNsaW5lIHRvIGFuc3dlciIsDQogICAgVFJVRSB+IGFzLmNoYXJhY3RlcihkYWVzaF9yZXNwKQ0KICApKSAlPiUgDQogIG11dGF0ZSh0aHJlYXRfY250cnlfbnVtID0gaWZlbHNlKHE4MjYgPiA1LCBOQSwgcTgyNikpICU+JSANCiAgbXV0YXRlKHRocmVhdF9yZWdfbnVtID0gaWZlbHNlKHE4MjcgPiA1LCBOQSwgcTgyNykpICU+JSANCiAgbXV0YXRlKGRhZXNoX2lzbGFtX251bSA9IGlmZWxzZShxODI4ID4gNSwgTkEsIDUgLSBxODI4KSkgJT4lIA0KICBtdXRhdGUoZGFlc2hfZ29hbF9udW0gPSBpZmVsc2UocTgyOSA+IDUsIE5BLCA1IC0gcTgyOSkpICU+JSANCiAgbXV0YXRlKGRhZXNoX3Zpb2xlbmNlX251bSA9IGlmZWxzZShxODMwID4gNSwgTkEsIDUgLSBxODMwKSkgDQoNCg0KIyBEZXBlbmRlbnQgVmFyaWFibGUNCmFyYWI0ICU8PiUgDQogIG11dGF0ZShpc2xhbWlzdHBhcnRpZXMgPSBpZmVsc2UocTUxODIgPiA1LCBOQSwgNSAtIHE1MTgyKSkgJT4lIA0KICBtdXRhdGUoaXNsYW1pc3Rnb3YgPSBpZmVsc2UocTUxODQgPiA1LCBOQSwgNSAtIHE1MTg0KSkgJT4lIA0KICBtdXRhdGUocmVsaWdpbnRlcmZlcmUgPSBpZmVsc2UocTYwNjEgPiA1LCBOQSwgcTYwNjEpKSAlPiUgDQogIG11dGF0ZShyZWxpZ2xlYWRlcnMgPSBpZmVsc2UocTYwNjIgPiA1LCBOQSwgNSAtIHE2MDYyKSkgJT4lIA0KICBtdXRhdGUocmVsaWdsZWFkZXJzaW5mbCA9IGlmZWxzZShxNjA2MyA+IDUsIE5BLCA1IC0gcTYwNjMpKSAlPiUNCiAgbXV0YXRlKHNlcGVyYXRpb24gPSBpZmVsc2UocTYwNjQgPiA1LCBOQSwgcTYwNjQpKSAlPiUgDQogIG11dGF0ZShyZWxpZ3BhcnR5ID0gUmVjb2RlKHE2MDVhLCAiMSA9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OCA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OSA9IE5BIikpICU+JSANCiAgbXV0YXRlKHJlbGlncGFydHkyID0gUmVjb2RlKHE2MDVhLCAiMSA9IDU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgPSA0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzID0gMjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgPSAzOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk4ID0gTkE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTkgPSBOQSIpKQ0KDQoNCg0KYXJhYjQgJTw+JSANCiAgbXV0YXRlKGZlbWFsZSA9IGlmZWxzZShxMTAwMiA9PSAyLCAxLCAwKSkgJT4lIA0KICBtdXRhdGUod29yayA9IGlmZWxzZShxMTAwNCA9PSAwIHwgcTEwMDQgPiA1LCBOQSwgYWJzKHExMDA0IC0gMikpKSAlPiUgDQogIG11dGF0ZShpbmNvbWUgPSBpZmVsc2U0Y2F0X3JlYyhxMTAxNikpICU+JSANCiAgbXV0YXRlKGFnZSA9IGlmZWxzZShxMTAwMSA9PSAwIHwgcTEwMDEgPT0gOTk5OSwgTkEsIHExMDAxKSkgJT4lIA0KICBtdXRhdGUoZWR1YyA9IGNhc2Vfd2hlbigNCiAgICAgICAgcTEwMDMgPT0gMCB+IE5BX3JlYWxfLA0KICAgICAgICBxMTAwMyA9PSA5OCB+IE5BX3JlYWxfLA0KICAgICAgICBxMTAwMyA9PSA5OSB+IE5BX3JlYWxfLA0KICAgICAgICBxMTAwMyA9PSA1IH4gNCwNCiAgICAgICAgcTEwMDMgPT0gNiB+IDUsDQogICAgICAgIHExMDAzID09IDcgfiA2LA0KICAgICAgICB0MTAwMyA9PSAwIH4gTkFfcmVhbF8sDQogICAgICAgIHQxMDAzID09IDk4IH4gTkFfcmVhbF8sDQogICAgICAgIHQxMDAzID09IDk5IH4gTkFfcmVhbF8sDQogICAgICAgIHQxMDAzID09IDMgfiAzLA0KICAgICAgICB0MTAwMyA9PSA0IH4gNCwNCiAgICAgICAgdDEwMDMgPT0gNSB+IDUsDQogICAgICAgIHQxMDAzID09IDYgfiA2LA0KICAgIFRSVUUgfiBhcy5udW1lcmljKHExMDAzKSkNCiAgICApICU+JSANCiAgbXV0YXRlKGdsb2JhbGlzbSA9IGlmZWxzZShxNzAxYiA9PSAwIHwgcTcwMWIgPiA1LCBOQSwgcTcwMWIpKSAlPiUgDQogIG11dGF0ZShwcmF5ID0gaWZlbHNlKHE2MTAxID09IDAgfCBxNjEwMSA+IDUsIE5BLCA2IC0gcTYxMDEpKSAlPiUgDQogIG11dGF0ZShxdXJhbiA9IGlmZWxzZShxNjEwNiA9PSAwIHwgcTYxMDYgPiA1LCBOQSwgNiAtIHE2MTA2KSkgJT4lIA0KICBtdXRhdGUod29tYW53b3JrID0gaWZlbHNlKHE2MDEyID09IDAgfCBxNjAxMiA+IDUsIE5BLCBxNjAxMikpICU+JSANCiAgbXV0YXRlKHdvbWVubGVhZGVyID0gaWZlbHNlNGNhdF9yZWMocTYwMTMpKSAlPiUgDQogIG11dGF0ZSh3b21lbmVkdWMgPSBpZmVsc2U0Y2F0X3JlYyhxNjAxNCkpICU+JSANCiAgbXV0YXRlKG5vZGVtb2MgPSBpZmVsc2UocTYwNzEgPT0gMCB8IHE2MDcxID4gNSwgTkEsIHE2MDcxKSkgJT4lIA0KICBtdXRhdGUoZ2VuZGVyYXBhcnR1bmkgPSBpZmVsc2U0Y2F0X3JlYyhxNjA3NCkpICU+JSANCiAgbXV0YXRlKGNvdmVydXAgPSBpZmVsc2U0Y2F0X3JlYyhxNjA3NikpIA0KDQpgYGANCg0KIyBFeGNsdWRpbmcgSVNJUw0KDQpgYGB7cn0NCmZycShhcmFiNCAlPiUgc2VsZWN0KGRhZXNoX2lzbGFtX251bSwgZGFlc2hfZ29hbF9udW0sIGRhZXNoX3Zpb2xlbmNlX251bSkpDQoNCmFyYWI0ICU8PiUgDQogIG11dGF0ZShzeW1wID0gY2FzZV93aGVuKA0KIyAgICBkYWVzaF9pc2xhbV9udW0gPT0gMSB+IDAsDQojICAgIGRhZXNoX2lzbGFtX251bSA9PSAyIH4gMCwNCiAgICBkYWVzaF9pc2xhbV9udW0gPT0gMyB+IDEsDQogICAgZGFlc2hfaXNsYW1fbnVtID09IDQgfiAxLA0KIyAgICBkYWVzaF9nb2FsX251bSA9PSAxIH4gMCwNCiMgICAgZGFlc2hfZ29hbF9udW0gPT0gMiB+IDAsDQogICAgZGFlc2hfZ29hbF9udW0gPT0gMyB+IDEsDQogICAgZGFlc2hfZ29hbF9udW0gPT0gNCB+IDEsDQojICAgIGRhZXNoX3Zpb2xlbmNlX251bSA9PSAxIH4gMCwNCiMgICAgZGFlc2hfdmlvbGVuY2VfbnVtID09IDIgfiAwLA0KICAgIGRhZXNoX3Zpb2xlbmNlX251bSA9PSAzIH4gMSwNCiAgICBkYWVzaF92aW9sZW5jZV9udW0gPT0gNCB+IDEsDQogICAgVFJVRSB+IDANCiAgKSkgJT4lICAgDQogIG11dGF0ZShjb21wYXRpYmxlID0gY2FzZV93aGVuKA0KICAgIGRhZXNoX2lzbGFtX251bSA9PSAxIH4gMCwNCiAgICBkYWVzaF9pc2xhbV9udW0gPT0gMiB+IDAsDQogICAgZGFlc2hfaXNsYW1fbnVtID09IDMgfiAxLA0KICAgIGRhZXNoX2lzbGFtX251bSA9PSA0IH4gMSwNCiAgICBUUlVFIH4gTkFfcmVhbF8NCiAgKSkgJT4lICAgDQogIG11dGF0ZShnb2FscyA9IGNhc2Vfd2hlbigNCiAgICBkYWVzaF9nb2FsX251bSA9PSAxIH4gMCwNCiAgICBkYWVzaF9nb2FsX251bSA9PSAyIH4gMCwNCiAgICBkYWVzaF9nb2FsX251bSA9PSAzIH4gMSwNCiAgICBkYWVzaF9nb2FsX251bSA9PSA0IH4gMSwNCiAgICBUUlVFIH4gTkFfcmVhbF8NCiAgKSkgJT4lICAgDQogIG11dGF0ZSh2aW9sZW5jZSA9IGNhc2Vfd2hlbigNCiAgICBkYWVzaF92aW9sZW5jZV9udW0gPT0gMSB+IDAsDQogICAgZGFlc2hfdmlvbGVuY2VfbnVtID09IDIgfiAwLA0KICAgIGRhZXNoX3Zpb2xlbmNlX251bSA9PSAzIH4gMSwNCiAgICBkYWVzaF92aW9sZW5jZV9udW0gPT0gNCB+IDEsDQogICAgVFJVRSB+IE5BX3JlYWxfDQogICkpICU+JSAgIA0KICBtdXRhdGUoc3ltcDIgPSBkYWVzaF9pc2xhbV9udW0gKyBkYWVzaF9nb2FsX251bSArIGRhZXNoX3Zpb2xlbmNlX251bSkgJT4lIA0KICBtdXRhdGUoc3ltcDMgPSBpZmVsc2Uoc3ltcDIgPj0gNSwgMSwgMCkpICU+JSANCiAgc2VsZWN0KGNudHJ5LCB5ZWFyLCByZWdpb24sIGdvdmVybm9yYXRlICwgaXNsYW1pc3RwYXJ0aWVzICwgaXNsYW1pc3Rnb3YsIHJlbGlnaW50ZXJmZXJlLCByZWxpZ2xlYWRlcnMsIHJlbGlnbGVhZGVyc2luZmwsIHNlcGVyYXRpb24sIHJlbGlncGFydHksIHJlbGlncGFydHkyLCBmZW1hbGUsIHdvcmssIGluY29tZSwgIGFnZSwgZWR1YywgZ2xvYmFsaXNtLCBwcmF5LCBxdXJhbiwgd29tYW53b3JrLCB3b21lbmxlYWRlciwgd29tZW5lZHVjLCBub2RlbW9jLCBnZW5kZXJhcGFydHVuaSwgY292ZXJ1cCwgZGFlc2hfaXNsYW1fbnVtLCBkYWVzaF9nb2FsX251bSwgZGFlc2hfdmlvbGVuY2VfbnVtLCBzeW1wLCBzeW1wMiwgc3ltcDMsIHd0LCBjb21wYXRpYmxlLCBnb2FscywgdmlvbGVuY2UpICMlPiUgDQojICBmaWx0ZXIoZGFlc2hfaXNsYW1fbnVtID49IDMgfCBkYWVzaF9nb2FsX251bSA+PSAzIHwgZGFlc2hfdmlvbGVuY2VfbnVtID49IDMpICU+JSANCiMgIHNlbGVjdChkYWVzaF9pc2xhbV9udW0sIGRhZXNoX2dvYWxfbnVtLCBkYWVzaF92aW9sZW5jZV9udW0sIHN5bXAsIHN5bXAyLCBzeW1wMykgJT4lIA0KIyAgZnJxKCkNCg0KYXJhYjQgJT4lIA0KICBzZWxlY3QoZGFlc2hfaXNsYW1fbnVtLCBkYWVzaF9nb2FsX251bSwgZGFlc2hfdmlvbGVuY2VfbnVtLCBjbnRyeSkgJT4lIA0KICBuYS5vbWl0KCkgJT4lIA0KICBzZWxlY3QoY250cnkpICU+JSANCiAgdGFibGUoKQ0KDQoNCmFyYWI0ICU+JSANCiAgc2VsZWN0KGNvbXBhdGlibGUsIGdvYWxzLCB2aW9sZW5jZSwgY250cnkpICU+JSANCiAgZnJxKCkNCmBgYA0KDQojIEZhY3RvciBBbmFseXNpcw0KDQpgYGB7cn0NCmYzMSA8LSBhcmFiNCAlPiUgDQogIHNlbGVjdChpc2xhbWlzdHBhcnRpZXMsIGlzbGFtaXN0Z292LCANCiAgICAgICAgIHJlbGlnbGVhZGVycywgcmVsaWdsZWFkZXJzaW5mbCkgJT4lIA0KICBmYSgxLCByb3RhdGUgPSAicHJvbWF4IiwgICANCiAgICAgICAgZm0gPSAicGEiLA0KICAgICAgICBzY29yZXMgPSAicmVncmVzc2lvbiIpICAgICAgICAgICANCmZhLmRpYWdyYW0oZjMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCmYzMSAgICAgICAgICAgICAgDQoNCmFyYWI0IDwtIHByZWRpY3QoZjMxLCBhcmFiNCAlPiUgDQogIHNlbGVjdChpc2xhbWlzdHBhcnRpZXMsIGlzbGFtaXN0Z292LCANCiAgICAgICAgIHJlbGlnbGVhZGVycywgcmVsaWdsZWFkZXJzaW5mbCkpICU+JSANCiAgZGF0YS5mcmFtZSgpICU+JSANCiAgcmVuYW1lKGlzbGFtaXNtID0gUEExKSAlPiUgDQogIGNiaW5kKGFyYWI0KSANCiMlPiUgDQojICBnZ3Bsb3QoYWVzKGlzbGFtaXNtKSkgKw0KIyAgZ2VvbV9oaXN0b2dyYW0oKSArDQojICBmYWNldF93cmFwKH5jbnRyeSwgc2NhbGVzID0gImZyZWUiKQ0KDQojc2pQbG90Ojp2aWV3X2RmKGFyYWIsIHNob3cuZnJxID0gVCwgc2hvdy5wcmMgPSBUKQ0KDQoNCmYyMSA8LSBhcmFiNCAlPiUgDQogIHNlbGVjdChkYWVzaF9pc2xhbV9udW0sIGRhZXNoX2dvYWxfbnVtLCBkYWVzaF92aW9sZW5jZV9udW0pICU+JSANCiAgZmEoMSwgcm90YXRlID0gInByb21heCIsICAgDQogICAgICAgIGZtID0gInBhIiwNCiAgICAgICAgc2NvcmVzID0gInJlZ3Jlc3Npb24iKSAgICAgICAgICAgDQpmYS5kaWFncmFtKGYyMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQpmMjEgICAgICAgICAgICAgIA0KDQphcmFiNCA8LSBwcmVkaWN0KGYyMSwgYXJhYjQgJT4lIA0KICBzZWxlY3QoZGFlc2hfaXNsYW1fbnVtLCBkYWVzaF9nb2FsX251bSwgZGFlc2hfdmlvbGVuY2VfbnVtKSkgJT4lIA0KICBkYXRhLmZyYW1lKCkgJT4lIA0KICBtdXRhdGUoc3VwcG9ydCA9IHJhbmdlMDEoUEExKSkgJT4lIA0KICBzZWxlY3Qoc3VwcG9ydCkgJT4lIA0KICBjYmluZChhcmFiNCkgICMlPiUgDQoNCmhpc3QoYXJhYjQkc3VwcG9ydCkNCmBgYA0KDQojIENyZWF0aW5nIGluZGljZXMNCg0KYGBge3J9DQpmMSA8LSBhcmFiNCAlPiUgDQogIHNlbGVjdCh3b21hbndvcmssIHdvbWVubGVhZGVyLCB3b21lbmVkdWMpICU+JSANCiAgZmEoMSwgcm90YXRlID0gInByb21heCIsICAgDQogICAgICAgIGZtID0gInBhIiwNCiAgICAgICAgc2NvcmVzID0gInJlZ3Jlc3Npb24iKSAgICAgICAgICAgDQpmYS5kaWFncmFtKGYxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCmYxICAgICAgICANCg0KZjIgPC0gYXJhYjQgJT4lIA0KICBzZWxlY3QocHJheSwgcXVyYW4pICU+JSANCiAgZmEoMSwgcm90YXRlID0gInByb21heCIsICAgDQogICAgICAgIGZtID0gInBhIiwNCiAgICAgICAgc2NvcmVzID0gInJlZ3Jlc3Npb24iKSAgICAgICAgICAgDQpmYS5kaWFncmFtKGYyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCmYyICAgIA0KDQpmMyA8LSBhcmFiNCAlPiUgDQogIHNlbGVjdChub2RlbW9jLCBnZW5kZXJhcGFydHVuaSwgY292ZXJ1cCkgJT4lIA0KICBmYSgxLCByb3RhdGUgPSAicHJvbWF4IiwgICANCiAgICAgICAgZm0gPSAicGEiLA0KICAgICAgICBzY29yZXMgPSAicmVncmVzc2lvbiIpICAgICAgICAgICANCmZhLmRpYWdyYW0oZjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KZjMgICAgDQoNCmFyYWI0ICU+JSANCiAgc2VsZWN0KG5vZGVtb2MsIGdlbmRlcmFwYXJ0dW5pLCBjb3ZlcnVwKSAlPiUgDQogIEtNTygpDQoNCg0KYXJhYjRfcmVnIDwtIGFyYWI0ICU+JSANCiAgbXV0YXRlKHBhdHJpYXJjaGFsdmFsdWVzID0gd29tYW53b3JrICsgd29tZW5sZWFkZXIgKyB3b21lbmVkdWMpICAlPiUgDQogIG11dGF0ZShwZXJzb25hbHBpZXR5ID0gcHJheSArIHF1cmFuKSAlPiUgDQojIG11dGF0ZShpc2xhbWlzbSA9IHNjYWxlKGlzbGFtaXNtKSkgJT4lIA0KIyAgbXV0YXRlX2lmKC5wcmVkaWNhdGUgPSBpcy5kb3VibGUsIHNjYWxlKSANCiAgbXV0YXRlKGxpYmVyYWxpc2xhbSA9IG5vZGVtb2MgKyBnZW5kZXJhcGFydHVuaSArIGNvdmVydXApICU+JSANCiAgbXV0YXRlKGNudHJ5ZWFycyA9IHBhc3RlKGNudHJ5LCB5ZWFyKSkNCg0KDQphcmFiNF9yZWckaXNsYW1pc20gPC0gYXMubnVtZXJpYyhyYW5nZTAxKGFyYWI0X3JlZyRpc2xhbWlzbSkgKiAxMDApDQoNCmFyYWI0X3JlZyRpbmNvbWUgICAgICAgICAgICAgPC0gYXMubnVtZXJpYyhzY2FsZShhcmFiNF9yZWckaW5jb21lKSkNCmFyYWI0X3JlZyRhZ2UgICAgICAgICAgICAgICAgPC0gYXMubnVtZXJpYyhzY2FsZShhcmFiNF9yZWckYWdlKSkNCmFyYWI0X3JlZyRlZHVjICAgICAgICAgICAgICAgPC0gYXMubnVtZXJpYyhzY2FsZShhcmFiNF9yZWckZWR1YykpIA0KYXJhYjRfcmVnJGdsb2JhbGlzbSAgICAgICAgICA8LSBhcy5udW1lcmljKHNjYWxlKGFyYWI0X3JlZyRnbG9iYWxpc20pKSAgIA0KYXJhYjRfcmVnJHBlcnNvbmFscGlldHkgICAgICA8LSBhcy5udW1lcmljKHNjYWxlKGFyYWI0X3JlZyRwZXJzb25hbHBpZXR5KSkgICAgICAgDQphcmFiNF9yZWckcGF0cmlhcmNoYWx2YWx1ZXMgIDwtIGFzLm51bWVyaWMoc2NhbGUoYXJhYjRfcmVnJHBhdHJpYXJjaGFsdmFsdWVzKSkgICAgICAgICAgIA0KYXJhYjRfcmVnJGxpYmVyYWxpc2xhbSAgICAgICA8LSBhcy5udW1lcmljKHNjYWxlKGFyYWI0X3JlZyRsaWJlcmFsaXNsYW0pKSAgICAgDQoNCmBgYA0KIyBWaXN1YWxpemF0aW9ucw0KDQpgYGB7cn0NCnRhYmxlKGFyYWI0X3JlZyRpbmNvbWUpDQoNCnQudGVzdChhcmFiNF9yZWckbGliZXJhbGlzbGFtIH4gYXJhYjRfcmVnJHN5bXApDQoNCg0KZ2d2aW9saW4oYXJhYjRfcmVnLCB4ID0gInN5bXAzIiwgeSA9ICJwZXJzb25hbHBpZXR5IiwNCiAgICAgICAgICAgICAgICBjb2xvciA9ICJzeW1wMyIsIHBhbGV0dGUgPWMoIiMwMEFGQkIiLCAiI0U3QjgwMCIpLA0KICAgICAgICAgICAgICAgICBzaGFwZSA9ICJzeW1wMyIpDQoNCmNudHJ5cyA8LSBjKCJBbGdlcmlhIiwgIkpvcmRhbiIsICJMZWJhbm9uIiwgIk1vcm9jY28iLCAiUGFsZXN0aW5lIiwgIlR1bmlzaWEiLCAiU3lyaWFuIFJlZnVnZWVzIikNCg0Kc3MgPC0gbGlzdCgpDQpmb3IgKGpqIGluIGNudHJ5cykgew0Kc3NbW2pqXV0gPC0gYXJhYjRfcmVnICU+JSANCiAgZmlsdGVyKGNudHJ5ID09IGpqKSAlPiUgIA0KICBzZWxlY3QoY250cnksIHBlcnNvbmFscGlldHksIHN5bXAzKSAlPiUgDQogIG5hLm9taXQoKSAlPiUgDQpnZ3Zpb2xpbih4ID0gInN5bXAzIiwgeSA9ICJwZXJzb25hbHBpZXR5IiwgZmlsbCA9ICJzeW1wMyIsDQogICAgICAgICBwYWxldHRlID0gYygiIzAwQUZCQiIsICIjRTdCODAwIiksDQogICAgICAgICBhZGQgPSAiYm94cGxvdCIsIGFkZC5wYXJhbXMgPSBsaXN0KGZpbGwgPSAid2hpdGUiKSkgKw0KICBzdGF0X2NvbXBhcmVfbWVhbnMobGFiZWwueSA9IDIpICsgZ2d0aXRsZShqaikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBnbG9iYWwgdGhlIHAtdmFsdWUgDQp9DQoNCnNzDQoNCnRhYmxlKGFyYWI0JHN5bXApDQojDQojYXJhYjRfcmVnICU+JSANCiMgIG11dGF0ZShzeW1wID0gYXMuZmFjdG9yKHN5bXApKSAlPiUgDQojZ2diYXJwbG90KHggPSAic3ltcCIsIHkgPSAicGVyc29uYWxwaWV0eSIsDQojICAgICAgICAgIyBmaWxsID0gInN5bXAiLCAgICAgICAgICAgIyBjaGFuZ2UgZmlsbCBjb2xvciBieSBtcGdfbGV2ZWwNCiMgICAgICAgICAgY29sb3IgPSAid2hpdGUiLCAgICAgICAgICAgICMgU2V0IGJhciBib3JkZXIgY29sb3JzIHRvIHdoaXRlDQojICAgICAgICAgIHBhbGV0dGUgPSAiamNvIiwgICAgICAgICAgICAjIGpjbyBqb3VybmFsIGNvbG9yIHBhbGV0dC4gc2VlID9nZ3Bhcg0KIyAgICAgICAgICBzb3J0LnZhbCA9ICJhc2MiLCAgICAgICAgICAgIyBTb3J0IHRoZSB2YWx1ZSBpbiBhc2NlbmRpbmcgb3JkZXINCiMgICAgICAgICAgc29ydC5ieS5ncm91cHMgPSBGQUxTRSwgICAgICMgRG9uJ3Qgc29ydCBpbnNpZGUgZWFjaCBncm91cA0KIyAgICAgICAgICB4LnRleHQuYW5nbGUgPSA5MCwgICAgICAgICAgIyBSb3RhdGUgdmVydGljYWxseSB4IGF4aXMgdGV4dHMNCiMgICAgICAgICAgeWxhYiA9ICJNUEcgei1zY29yZSIsDQojICAgICAgICAgIHhsYWIgPSBGQUxTRSwNCiMgICAgICAgICAgbGVnZW5kLnRpdGxlID0gIk1QRyBHcm91cCINCiMgICAgICAgICAgKQ0KIw0KYXJhYjRfcmVnICU+JSANCiMgIHNlbGVjdChlZHVjLCBzeW1wMikgJT4lIA0KICBnZ3Bsb3QoYWVzKGluY29tZSwgc3ltcDIpKSArIA0KIyAgZ2VvbV9wb2ludCgpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIikNCg0KYXJhYjRfcmVnICU+JSANCiAgbXV0YXRlKHN5bXAgPSBhcy5mYWN0b3Ioc3ltcCkpICU+JSANCmdnc2NhdHRlcih4ID0gInBlcnNvbmFscGlldHkiLCB5ID0gInN5bXAyIiwNCiAgIGNvbG9yID0gInN5bXAiICwgc2hhcGUgPSAyMSwgc2l6ZSA9IDMsICMgUG9pbnRzIGNvbG9yLCBzaGFwZSBhbmQgc2l6ZQ0KICAgYWRkID0gInJlZy5saW5lIiwgICMgQWRkIHJlZ3Jlc3NpbiBsaW5lDQogICBhZGQucGFyYW1zID0gbGlzdChjb2xvciA9ICJibHVlIiwgZmlsbCA9ICJsaWdodGdyYXkiKSwgIyBDdXN0b21pemUgcmVnLiBsaW5lDQogICBjb25mLmludCA9IFRSVUUsICMgQWRkIGNvbmZpZGVuY2UgaW50ZXJ2YWwNCiAgIGNvci5jb2VmID0gVFJVRSwgIyBBZGQgY29ycmVsYXRpb24gY29lZmZpY2llbnQuIHNlZSA/c3RhdF9jb3INCiAgIGNvci5jb2VmZi5hcmdzID0gbGlzdChtZXRob2QgPSAicGVhcnNvbiIsIGxhYmVsLnggPSAzLCBsYWJlbC5zZXAgPSAiXG4iKSwgIGZhY2V0LmJ5ID0gImNudHJ5Ig0KICAgKQ0KDQoNCiAgYXJhYjRfcmVnICU+JSANCiMgIHNlbGVjdChlZHVjLCBzeW1wMikgJT4lIA0KICBnZ3Bsb3QoYWVzKGlzbGFtaXNtLCBzeW1wMikpICsgDQojICBnZW9tX3BvaW50KCkgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iKSArDQogICAgZmFjZXRfd3JhcCh+Y250cnkpICsgc3RhdF9jb3IoKQ0KICANCiAgcGFjbWFuOjpwX2xvYWQoInlhcnJyIikNCiAgcGlyYXRlcGxvdChmb3JtdWxhID0gc3VwcG9ydCB+IHJvdW5kKG5vZGVtb2MpLA0KICAgICAgICAgICBkYXRhID0gYXJhYjRfcmVnLA0KICAgICAgICAgICBtYWluID0gIkZ1bGx5IGN1c3RvbWl6ZWQgcGlyYXRlcGxvdCIsDQogICAgICAgICAgIHBhbCA9ICJzb3V0aHBhcmsiLCAjIHNvdXRocGFyayBjb2xvciBwYWxldHRlDQogICAgICAgICAgIGJlYW4uZi5vID0gLjAsICMgQmVhbiBmaWxsDQogICAgICAgICAgIHBvaW50Lm8gPSAuMCwgIyBQb2ludHMNCiAgICAgICAgICAgaW5mLmYubyA9IC43LCAjIEluZmVyZW5jZSBmaWxsDQogICAgICAgICAgIGluZi5iLm8gPSAuMCwgIyBJbmZlcmVuY2UgYm9yZGVyDQogICAgICAgICAgIGF2Zy5saW5lLm8gPSAxLCAjIEF2ZXJhZ2UgbGluZQ0KICAgICAgICAgICBiYXIuZi5vID0gLjUsICMgQmFyDQogICAgICAgICAgIGluZi5mLmNvbCA9ICJ3aGl0ZSIsICMgSW5mIGZpbGwgY29sDQogICAgICAgICAgIGluZi5iLmNvbCA9ICJibGFjayIsICMgSW5mIGJvcmRlciBjb2wNCiAgICAgICAgICAgYXZnLmxpbmUuY29sID0gImJsYWNrIiwgIyBhdmcgbGluZSBjb2wNCiAgICAgICAgICAgYmFyLmYuY29sID0gZ3JheSguOCksICMgYmFyIGZpbGxpbmcgY29sb3INCiAgICAgICAgICAgcG9pbnQucGNoID0gMjEsDQogICAgICAgICAgIHBvaW50LmJnID0gIndoaXRlIiwNCiAgICAgICAgICAgcG9pbnQuY29sID0gImJsYWNrIiwNCiAgICAgICAgICAgcG9pbnQuY2V4ID0gLjcpDQogIA0KICANCmFyYWI0X3JlZyAlPiUgDQogIGdncGxvdChhZXMoZmFjdG9yKHN5bXApLCBwZXJzb25hbHBpZXR5KSkgKw0KICBnZW9tX2JveHBsb3QoKQ0KDQoNCiAgcGlyYXRlcGxvdChmb3JtdWxhID0gc3ltcDMgfiByb3VuZChwZXJzb25hbHBpZXR5KSwNCiAgICAgICAgICAgZGF0YSA9IGFyYWI0X3JlZywNCiAgICAgICAgICAgbWFpbiA9ICJSZWR1Y2luZyBhIHBpcmF0ZXBsb3QgdG8gYSBiYXJwbG90IiwNCiAgICAgICAgICAgdGhlbWUgPSAwLCAjIFN0YXJ0IGZyb20gc2NyYXRjaA0KICAgICAgICAgICBiYXIuZi5vID0gLjcpICMgSnVzdCB0dXJuIG9uIHRoZSBiYXJzDQogIA0KDQogIA0Kc3MgPC0gc2p0Lnh0YWIocm91bmQoYXJhYjRfcmVnJHBlcnNvbmFscGlldHkpLCANCiAgICAgICAgIGFyYWI0X3JlZyRzeW1wLCANCiAgICAgICAgIHdlaWdodC5ieSA9IGFyYWI0X3JlZyR3dCwgDQogICAgICAgICBzaG93LnJvdy5wcmMgPSBULHNob3cuY29sLnByYyA9IFQpDQoNCg0KIyBhcmFiNF9yZWcgJT4lIA0KIyAgIG11dGF0ZShwZXJjX3N1cHBvcnQgPSApDQojIA0KIyBwcm9wLnRhYmxlKGFyYWI0X3JlZyRzeW1wMykNCiMgDQojICBwcm9wLnRhYmxlKHN0YXRzOjp4dGFicyhhcmFiNF9yZWckd3QgfiAjIGFyYWI0X3JlZyRwZXJzb25hbHBpZXR5KSkNCiMgICBwcm9wLnRhYmxlKHN0YXRzOjp4dGFicyhhcmFiNF9yZWckd3QgfiBhcmFiNF9yZWckc3ltcDMpKQ0KIyANCiMgamFuaXRvcjo6Y3Jvc3N0YWIoYXJhYjRfcmVnJHN5bXAzLCAjIHJvdW5kKHJhbmdlMDEoYXJhYjRfcmVnJHBlcnNvbmFscGlldHkpKjQpKQ0KIyANCiMgI2luc3RhbGwucGFja2FnZXMoInF1ZXN0aW9uciIpDQojIGxpYnJhcnkoZGVzY3IpDQojIHNzIDwtIGNyb3NzdGFiKGFyYWI0X3JlZyRzeW1wMywgIyByb3VuZChyYW5nZTAxKGFyYWI0X3JlZyRwZXJzb25hbHBpZXR5KSo0KSwgd2VpZ2h0ID0gIyBhcmFiNF9yZWckd3QpICU+JSBhcy5kYXRhLmZyYW1lLmNvbXBsZXgoKSAlPiUgdGJsX2RmDQojIA0KIyANCiMgcGVyY19kYXQgPC0gcXVlc3Rpb25yOjp3dGQudGFibGUoYXJhYjRfcmVnJHN5bXAzLCANCiMgICAgICAgICAgICAgICAgICAgICAgIyByb3VuZChyYW5nZTAxKGFyYWI0X3JlZyRwZXJzb25hbHBpZXR5KSo0KSwgDQojICAgICAgICAgICAgICAgICAgICAgIHdlaWdodHMgPSBhcmFiNF9yZWckd3QpICU+JSANCiMgICB0KCkgJT4lIA0KIyAgIGFzLmRhdGEuZnJhbWUubWF0cml4KCkgJT4lIA0KIyAgIGNiaW5kKHJvd19zdW1zKHBlcmNfZGF0KSkgJT4lDQojICAgbXV0YXRlKHN1cHBfcGVyYyA9IGAxYC9yb3dzdW1zKQ0KIyAgIG11dGF0ZShwZXJzb25hbHBpZXR5ID0gMDo0KSAjJT4lIA0KIyAjJT4lIA0KIyAgICNnYXRoZXIoInBlcnNvbmFseXBpZXR5IiwgInRvdGFsIiwgLXN1cHBvcnQpIA0KIyAjDQojICNhcmFiNF9yZWcgJT4lIA0KIyAjICBzZWxlY3Qoc3ltcDMsIHBlcnNvbmFscGlldHksIHd0KSAlPiUgDQojICMgIGdyb3VwX2J5KHN5bXAzLCBwZXJzb25hbHBpZXR5KSAlPiUNCiMgIyAgc3VtbWFyaXNlKGNvdW50X3cgPSBzdW0od3QpKSAlPiUNCiMgIyAgbXV0YXRlKGZyZXEgPSBjb3VudF93L3N1bShjb3VudF93KSkgICU+JSANCiMgIyAgbmEub21pdCgpDQojIA0KIyBxdWVzdGlvbnI6OmNyb3NzLm11bHRpLnRhYmxlKGRmID0gYXJhYjRfcmVnICU+JSAgIyBzZWxlY3QoYWdlLCB3b3JrKSwgDQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3N2YXIgPSAjIGFzLm51bWVyaWMoYXJhYjRfcmVnJHN5bXAzKSwNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRzID0gIyBhcy5udW1lcmljKGFyYWI0X3JlZyR3dCksIGZyZXEgPSBULCB0ZnJlcSA9ICJyb3ciKQ0KDQphbGwgPC0gc2pwLnh0YWIocm91bmQocmFuZ2UwMShhcmFiNF9yZWckcGVyc29uYWxwaWV0eSkqNCksIA0KICAgICAgICAgICAgICAgYXJhYjRfcmVnJHN5bXAzLA0KICAgICAgICAgICAgICAgd2VpZ2h0LmJ5ID0gYXJhYjRfcmVnJHd0LCANCiAgICAgICAgICAgICAgIGNvb3JkLmZsaXAgPSBULCANCiAgICAgICAgICAgICAgIG1hcmdpbiA9ICJyb3ciICkkbXlkZg0KYWxsJGNudHJ5IDwtICJBbGwiDQoNCmxpbmVfcGxvdHMgPC0gZnVuY3Rpb24oY291bnRyeSwgdmFyaWFibGUpIHsNCg0KICBhcmFiNF9yZWcgJTw+JSANCiAgICBmaWx0ZXIoY250cnkgPT0gY291bnRyeSkNCnNzIDwtIHNqcC54dGFiKHJvdW5kKHJhbmdlMDEoYXJhYjRfcmVnJHBlcnNvbmFscGlldHkpKjQpLA0KICAgICAgICAgICAgICAgYXJhYjRfcmVnJHN5bXAzLA0KICAgICAgICAgICAgICAgd2VpZ2h0LmJ5ID0gYXJhYjRfcmVnJHd0LCANCiAgICAgICAgICAgICAgIGNvb3JkLmZsaXAgPSBULCANCiAgICAgICAgICAgICAgIG1hcmdpbiA9ICJyb3ciLCBwcm50LnBsb3QgPSBGKSRteWRmDQpzcyRjbnRyeSA8LSBjb3VudHJ5DQpyZXR1cm4oc3MpDQp9DQoNCnNzIDwtIGRwdXQodW5pcXVlKGFyYWI0X3JlZyRjbnRyeSkpICU+JSANCiAgbWFwX2RmKGxpbmVfcGxvdHMpICU+JSANCiAgcmJpbmQoYWxsKQ0KDQoNCg0KIyMgVHdvLXdheSBmcmVxdWVuY3kgdGFibGUgb24gJ211c2ljJyB2YXJpYWJsZXMgYnkgc2V4DQpzcyAlPiUgDQogIHNlbGVjdChyb3duYW1lLCBncm91cCwgcHJjLCBuLCBjbnRyeSkgJT4lIA0KICBmaWx0ZXIoZ3JvdXAgPT0gIlgxIikgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSByb3duYW1lLCB5ID0gcHJjLCBncm91cCA9IGNudHJ5LCBjb2xvciA9IGNudHJ5KSkgKw0KIyAgZ2VvbV9wb2ludCgpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBmYWNldF93cmFwKH5jbnRyeSkNCg0KDQoNCnBsb3RseTo6Z2dwbG90bHkoKQ0KDQp0YWJsZShhcmFiNF9yZWckZWR1YykNCmBgYA0KIyBlZHVjYXRpb24NCg0KYGBge3J9DQoNCg0KYWxsIDwtIHNqcC54dGFiKHJvdW5kKHJhbmdlMDEoYXJhYjRfcmVnJGVkdWMpKjYpLCANCiAgICAgICAgICAgICAgIGFyYWI0X3JlZyRzeW1wMywNCiAgICAgICAgICAgICAgIHdlaWdodC5ieSA9IGFyYWI0X3JlZyR3dCwgDQogICAgICAgICAgICAgICBjb29yZC5mbGlwID0gVCwgDQogICAgICAgICAgICAgICBtYXJnaW4gPSAicm93IiApJG15ZGYNCmFsbCRjbnRyeSA8LSAiQWxsIg0KDQpsaW5lX3Bsb3RzIDwtIGZ1bmN0aW9uKGNvdW50cnksIHZhcmlhYmxlKSB7DQoNCiAgYXJhYjRfcmVnICU8PiUgDQogICAgZmlsdGVyKGNudHJ5ID09IGNvdW50cnkpDQpzcyA8LSBzanAueHRhYihyb3VuZChyYW5nZTAxKGFyYWI0X3JlZyRlZHVjKSo2KSwNCiAgICAgICAgICAgICAgIGFyYWI0X3JlZyRzeW1wMywNCiAgICAgICAgICAgICAgIHdlaWdodC5ieSA9IGFyYWI0X3JlZyR3dCwgDQogICAgICAgICAgICAgICBjb29yZC5mbGlwID0gVCwgDQogICAgICAgICAgICAgICBtYXJnaW4gPSAicm93IiwgcHJudC5wbG90ID0gRikkbXlkZg0Kc3MkY250cnkgPC0gY291bnRyeQ0KcmV0dXJuKHNzKQ0KfQ0KDQpzcyA8LSBkcHV0KHVuaXF1ZShhcmFiNF9yZWckY250cnkpKSAlPiUgDQogIG1hcF9kZihsaW5lX3Bsb3RzKSAlPiUgDQogIHJiaW5kKGFsbCkNCg0KDQoNCiMjIFR3by13YXkgZnJlcXVlbmN5IHRhYmxlIG9uICdtdXNpYycgdmFyaWFibGVzIGJ5IHNleA0Kc3MgJT4lIA0KICBzZWxlY3Qocm93bmFtZSwgZ3JvdXAsIHByYywgbiwgY250cnkpICU+JSANCiAgZmlsdGVyKGdyb3VwID09ICJYMSIpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gcm93bmFtZSwgeSA9IHByYywgZ3JvdXAgPSBjbnRyeSwgY29sb3IgPSBjbnRyeSkpICsNCiMgIGdlb21fcG9pbnQoKSArDQogIGdlb21fbGluZSgpICsgDQogIGZhY2V0X3dyYXAofmNudHJ5LCBzY2FsZXMgPSAiZnJlZSIpDQoNCnBsb3RseTo6Z2dwbG90bHkoKQ0KYGBgDQoNCmBgYHtyfQ0KZ2V0X2RhdGEgPC0gZnVuY3Rpb24oYXJhYjRfcmVnLCB3aGljaG9uZSwgc2NhbGUpIHsNCiAgDQphbGwgPC0gc2pwLnh0YWIocm91bmQocmFuZ2UwMSh3aGljaG9uZSkqc2NhbGUpLCANCiAgICAgICAgICAgICAgIGFyYWI0X3JlZyRzeW1wMywNCiAgICAgICAgICAgICAgIHdlaWdodC5ieSA9IGFyYWI0X3JlZyR3dCwgDQogICAgICAgICAgICAgICBjb29yZC5mbGlwID0gVCwgDQogICAgICAgICAgICAgICBtYXJnaW4gPSAicm93IiApJG15ZGYNCmFsbCRjbnRyeSA8LSAiQWxsIg0KDQpsaW5lX3Bsb3RzIDwtIGZ1bmN0aW9uKGNvdW50cnkpIHsNCiAgd2hpY2hvbmUgPC0gd2hpY2hvbmUNCg0KYXJhYjRfcmVnICU8PiUgDQogICAgZmlsdGVyKGNudHJ5ID09IGNvdW50cnkpDQpzcyA8LSBzanAueHRhYihyb3VuZChyYW5nZTAxKHdoaWNob25lKSpzY2FsZSksDQogICAgICAgICAgICAgICBhcmFiNF9yZWckc3ltcDMsDQogICAgICAgICAgICAgICB3ZWlnaHQuYnkgPSBhcmFiNF9yZWckd3QsIA0KICAgICAgICAgICAgICAgY29vcmQuZmxpcCA9IFQsIA0KICAgICAgICAgICAgICAgbWFyZ2luID0gInJvdyIsIHBybnQucGxvdCA9IEYpJG15ZGYNCnNzJGNudHJ5IDwtIGNvdW50cnkNCnJldHVybihzcykNCn0NCg0Kc3MgPC0gZHB1dCh1bmlxdWUoYXJhYjRfcmVnJGNudHJ5KSkgJT4lIA0KICBtYXBfZGYobGluZV9wbG90cykgJT4lIA0KICByYmluZChhbGwpDQoNCnJldHVybihzcykNCn0NCg0KZ2V0X2RhdGEoYXJhYjRfcmVnID0gYXJhYjRfcmVnLCB3aGljaG9uZSA9IGFyYWI0X3JlZyRpbmNvbWUsIHNjYWxlID0gNCkNCg0KdGFibGUoYXJhYjRfcmVnJG5vZGVtb2MpDQpgYGANCg0KDQojIExpbmVhciBSZWdyZXNzaW9ucw0KDQpgYGB7cn0NCm1vZGVsMCA8LSBhcmFiNF9yZWcgJT4lIA0KICBsbWU0OjpsbWVyKHN5bXAyIH4gMSArICgxfGNudHJ5L3llYXIpLCBkYXRhID0gLikNCg0KaWNjKG1vZGVsMCkNCg0KbW9kZWwxIDwtIGxtZTQ6OmxtZXIoc3ltcDIgfiBmZW1hbGUgKyB3b3JrICsgaW5jb21lICsgYWdlICsgZWR1YyArIGdsb2JhbGlzbSArIHBlcnNvbmFscGlldHkgKyBwYXRyaWFyY2hhbHZhbHVlcyArIGxpYmVyYWxpc2xhbSArIGlzbGFtaXNtICsgKDF8Y250cnkpLCBkYXRhID0gYXJhYjRfcmVnKQ0KDQp0ZXhyZWc6OnNjcmVlbnJlZyhtb2RlbDEpDQoNCnBsb3RfbW9kZWwobW9kZWwxLCB0eXBlID0gInJlIiwgc29ydC5lc3QgPSBULCBzaG93LnZhbHVlcyA9IFQsIHNob3cucCA9IFQsIHZhbHVlLm9mZnNldCA9IDAuNSkNCg0KI3Bsb3RfbW9kZWwobW9kZWwxLCB0eXBlID0gInN0ZCIsIHNvcnQuZXN0ID0gVCwgc2hvdy52YWx1ZXMgPSBULCBzaG93LnAgPSBULCB2YWx1ZS5vZmZzZXQgPSAwLjUpDQoNCnNqcC5sbWVyKG1vZGVsMSwgdHlwZSA9ICJmZS5zdGQiLCBzb3J0LmVzdCA9IFQsIHNob3cudmFsdWVzID0gVCwgc2hvdy5wID0gVCwgeS5vZmZzZXQgPSAwLjQsIHAua3IgPSBGQUxTRSkNCg0KcGxvdF9tb2RlbChtb2RlbDEsIHRlcm1zID0gYygibGliZXJhbGlzbGFtIiwgInBlcnNvbmFscGlldHkiKSwgdHlwZSA9ICJwcmVkIikNCg0KYGBgDQoNCiMgUG9pc3NvbiBSZWdyZXNzaW9ucw0KDQpgYGB7cn0NCiNzdW1tYXJ5KG0xIDwtIGdsbShzdXBwb3J0IH4gZmVtYWxlICsgd29yayArIGluY29tZSArIGFnZSArIGVkdWMgKyBnbG9iYWxpc20gKyBwZXJzb25hbHBpZXR5ICsgcGF0cmlhcmNoYWx2YWx1ZXMgKyBsaWJlcmFsaXNsYW0sIGZhbWlseT0icG9pc3NvbiIsIGRhdGE9YXJhYjRfcmVnKSkNCg0KI3Bsb3RfbW9kZWwobTEpDQpgYGANCg0KDQojIExvZ2lzdGljIFJlZ3Jlc3Npb25zDQoNCmBgYHtyfQ0KZml0MSA8LSBnbG1lcihzeW1wIH4gMSArKDF8Y250cnkpLCBkYXRhID0gYXJhYjRfcmVnLA0KICAgICAgICAgICAgICBmYW1pbHkgPSBiaW5vbWlhbCgibG9naXQiKSkNCg0KaWNjKGZpdDEpDQpkYXRzIDwtIGFyYWI0X3JlZyAlPiUgDQogIHNlbGVjdChzeW1wLCBmZW1hbGUsIHdvcmssIGluY29tZSwgYWdlLCBlZHVjICwgcGVyc29uYWxwaWV0eSAsICBwYXRyaWFyY2hhbHZhbHVlcywgbGliZXJhbGlzbGFtLCBjbnRyeSwNCiAgICAgICAgIG5vZGVtb2MsIGdlbmRlcmFwYXJ0dW5pLCBjb3ZlcnVwLA0Kd29tYW53b3JrLCB3b21lbmxlYWRlciwgd29tZW5lZHVjLCBsaWJlcmFsaXNsYW0sIGlzbGFtaXNtKSAlPiUgDQogIHNhbXBsZV9mcmFjKDEpICU+JSANCiAgbmEub21pdCgpDQpkYXRzJG5ldyA8LSBsb2coKDEtcmFuZ2UwMShkYXRzJHBlcnNvbmFscGlldHkpKSsxKjgpDQpoaXN0KGRhdHMkbmV3KQ0KZml0MiA8LSBnbG1lcihzeW1wIH4gZmVtYWxlICsgd29yayArIGluY29tZSArIGFnZSArIGVkdWMgKyBuZXcgKyBub2RlbW9jKyBnZW5kZXJhcGFydHVuaSsgY292ZXJ1cCArIA0Kd29tYW53b3JrKyB3b21lbmxlYWRlcisgd29tZW5lZHVjICsgd29yayAqIGVkdWMrI1JlbGlnaW9zaXR5IGFuZCBNb2RlcmF0aW9uDQogICAgICAgICAgICAgICAgKDEgfGNudHJ5KSwgZGF0YSA9IGRhdHMsDQogICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKCJsb2dpdCIpKSMsIA0KICAgICAgICAgICMgICAgZ2xtZXJDb250cm9sKG9wdGltaXplciA9ICJib2J5cWEiLCBvcHRDdHJsID0gbGlzdChtYXhmdW4gPSAxMDAwMDApKSkNCnN1bW1hcnkoZml0MikNCmljYyhmaXQyKQ0KDQp0ZXhyZWc6OnNjcmVlbnJlZyhmaXQyKQ0KDQpwbG90X21vZGVsKGZpdDIsIHRlcm1zID0gYygicGVyc29uYWxwaWV0eSIpLCB0eXBlID0gImVmZiIpDQpwbG90X21vZGVsKGZpdDIsIHRlcm1zID0gYygibm9kZW1vYyIpLCB0eXBlID0gImVmZiIpDQpwbG90X21vZGVsKGZpdDIsIHRlcm1zID0gYygid29tZW5lZHVjIiksIHR5cGUgPSAiZWZmIikNCnNzIDwtIHNqcC5nbG1lcihmaXQyLCB0eXBlID0gImZlLnN0ZCIsIHNvcnQuZXN0ID0gVCwgc2hvdy52YWx1ZXMgPSBULCBzaG93LnAgPSBULCB5Lm9mZnNldCA9IDAuNCwgcC5rciA9IEZBTFNFKQ0Kc2pwLmludChmaXQyKQ0KDQojc3MNCmxpYnJhcnkoTXVNSW4pDQpyLnNxdWFyZWRHTE1NKGZpdDIpDQoNCm9wdGlvbnMoc2NpcGVuID0gOTk5KQ0KcGFjbWFuOjpwX2xvYWQobG9naXN0ZiwgYnJtcywgZ2xtbVRNQiwgcnN0YW5hcm0pDQpscjIgPSBsb2dpc3RmKHN5bXAgfiBmZW1hbGUgKyB3b3JrICsgaW5jb21lICsgYWdlICsgZWR1YyArIHBlcnNvbmFscGlldHkgKyBub2RlbW9jKyBnZW5kZXJhcGFydHVuaSsgY292ZXJ1cCArIA0Kd29tYW53b3JrKyB3b21lbmxlYWRlcisgd29tZW5lZHVjLCBkYXRhID0gZGF0cykNCnN1bW1hcnkobHIyKQ0KDQoNCmJybShzeW1wIH4gMSsgI1JlbGlnaW9zaXR5IGFuZCBNb2RlcmF0aW9uDQogICAgICAgICAgICAgICAgKDEgfGNudHJ5KSwgZGF0YSA9IGRhdHMsDQogICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKCJsb2dpdCIpKQ0KDQojbTEgPC0gYnJtKA0KIyAgc3ltcCB+IDErICNSZWxpZ2lvc2l0eSBhbmQgTW9kZXJhdGlvbg0KIyAgICAgICAgICAgICAgICAoMSB8Y250cnkpLCBkYXRhID0gZGF0cywNCiMgIGZhbWlseSA9IHplcm9faW5mbGF0ZWRfcG9pc3NvbihsaW5rID0gImxvZyIsIGxpbmtfemkgPSAibG9naXQiKQ0KIykNCg0KbTIgPC0gc3Rhbl9nbG1lci5uYigNCiAgc3ltcCB+IGZlbWFsZSArIHdvcmsgKyBpbmNvbWUgKyBhZ2UgKyBlZHVjICsgcGVyc29uYWxwaWV0eSArIG5vZGVtb2MrIGdlbmRlcmFwYXJ0dW5pKyBjb3ZlcnVwICsgDQp3b21hbndvcmsrIHdvbWVubGVhZGVyKyB3b21lbmVkdWMrICNSZWxpZ2lvc2l0eSBhbmQgTW9kZXJhdGlvbg0KICAgICAgICAgICAgICAgICgxIHxjbnRyeSksIGRhdGEgPSBkYXRzDQopDQoNCnN1bW1hcnkobTIpDQp0aGVtZV9zZXQodGhlbWVfc2pwbG90KCkpDQpwbG90X21vZGVsKG0yLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoInBlcnNvbmFscGlldHkiLCAibm9kZW1vYyIpLCBjaS5sdmwgPSAuMDAxKQ0KDQpwbG90X21vZGVsKG0yLCBicGUgPSAibWVhbiIsIGJwZS5zdHlsZSA9ICJkb3QiKQ0KDQptMyA8LSBzdGFuX2dsbWVyKCBzeW1wIH4gZmVtYWxlICsgd29yayArIGluY29tZSArIGFnZSArIGVkdWMgKyBwZXJzb25hbHBpZXR5ICsgbm9kZW1vYysgZ2VuZGVyYXBhcnR1bmkrIGNvdmVydXAgKyANCndvbWFud29yaysgd29tZW5sZWFkZXIrIHdvbWVuZWR1YysgbGliZXJhbGlzbGFtICsgaXNsYW1pc20gKyNSZWxpZ2lvc2l0eSBhbmQgTW9kZXJhdGlvbg0KICAgICAgICAgICAgICAgICgxIHxjbnRyeSksIGRhdGEgPSBkYXRzDQopDQoNCnRpZHlfc3RhbihtMykNCg0KcGxvdF9tb2RlbChtMywgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJpc2xhbWlzbSIsICJub2RlbW9jIiksIGNpLmx2bCA9IC4wMDEpDQoNCnBsb3RfbW9kZWwobTMsIGJwZSA9ICJtZWFuIiwgYnBlLnN0eWxlID0gImRvdCIsIHNvcnQuZXN0ID0gVCwgc2hvdy52YWx1ZXMgPSBULCBzaG93LnAgPSBULCB2YWx1ZS5vZmZzZXQgPSAwLjUpDQoNCnBsb3QobTMsIHByb2IgPSAwLjUsIHBhcnMgPSAiYmV0YSIpDQoNCnBhcmFtcyA8LSAgYygiZmVtYWxlIiAsICJ3b3JrIiAsICJpbmNvbWUiICwgImFnZSIgLCAiZWR1YyIgLCAicGVyc29uYWxwaWV0eSIgLCAibm9kZW1vYyIsICJnZW5kZXJhcGFydHVuaSIsICJjb3ZlcnVwIiAsIA0KIndvbWFud29yayIsICJ3b21lbmxlYWRlciIsICJ3b21lbmVkdWMiKQ0KDQpwbG90KG0zLCBwbG90ZnVuID0gImFyZWFzIiwgcHJvYiA9IDAuOSwgIyA/YmF5ZXNwbG90OjptY21jX2FyZWFzDQogICAgIHBhcnMgPSBwYXJhbXMpDQoNCnBwX2NoZWNrKG0zLCBwbG90ZnVuID0gImVycm9yX2Jpbm5lZCIpICAjID9iYXllc3Bsb3Q6OnBwY19lcnJvcl9iaW5uZWQNCg0KDQoNCg0KcGxvb290cyA8LSBmdW5jdGlvbih2YXJpYWJsZXMpIHsNCiAgcGxvdChtMywgcGxvdGZ1biA9ICJjb21ibyIsIHJlZ2V4X3BhcnMgPSB2YXJpYWJsZXMpDQp9DQoNCnBhcmFtcyAlPiUgDQogIG1hcChwbG9vb3RzKQ0KDQoobG9vMSA8LSBsb28obTMpKQ0KDQojIFByZWRpY3RlZCBwcm9iYWJpbGl0eSBhcyBhIGZ1bmN0aW9uIG9mIHgNCnByX3N3aXRjaCA8LSBmdW5jdGlvbih4LCBlc3RzKSBwbG9naXMoZXN0c1sxXSArIGVzdHNbMl0gKiB4KQ0KIyBBIGZ1bmN0aW9uIHRvIHNsaWdodGx5IGppdHRlciB0aGUgYmluYXJ5IGRhdGENCmppdHQgPC0gZnVuY3Rpb24oLi4uKSB7DQogIGdlb21fcG9pbnQoYWVzX3N0cmluZyguLi4pLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcihoZWlnaHQgPSAwLjA1LCB3aWR0aCA9IDAuMSksIA0KICAgICAgICAgICAgIHNpemUgPSAyLCBzaGFwZSA9IDIxLCBzdHJva2UgPSAwLjIpDQp9DQpnZ3Bsb3QoYXJhYjRfcmVnLCBhZXMoeCA9IHBlcnNvbmFscGlldHksIHkgPSBzeW1wLCBjb2xvciA9IHN5bXApKSArIA0KICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gYygwLCAwLjUsIDEpKSArDQogIGppdHQoeD0icGVyc29uYWxwaWV0eSIpICsgDQogIHN0YXRfZnVuY3Rpb24oZnVuID0gcHJfc3dpdGNoLCBhcmdzID0gbGlzdChlc3RzID0gY29lZihtMykpLCANCiAgICAgICAgICAgICAgICBzaXplID0gMiwgY29sb3IgPSAiZ3JheTM1IikgKyBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iKQ0KDQoNCg0KYGBgDQoNCg==